package com.lin.guli.service.edu.controller.admin;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lin.guli.service.base.result.R;
import com.lin.guli.service.edu.entity.Teacher;
import com.lin.guli.service.edu.service.TeacherService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

/**
 * <p>
 * 讲师 前端控制器
 * </p>
 *
 * @author lin
 * @since 2021-10-09
 */
@Slf4j
@RestController     //相当于Controller+RequestBody（将响应的对象转为json存到响应体中）
@RequestMapping("/admin/edu/teacher")       //表示管理员访问
@Api(tags = "讲师管理模块")   //对controller进行描述
public class AdminTeacherController {
    /*
        自动装配业务类对象查询数据集合返回
    */

    @Autowired
    TeacherService teacherService;

    //1.查询所有讲师
    @GetMapping("list")
    public R list(){
        log.debug("当前日志级别：{},当前时间：{}","debug",new Date());
        //开发中一般输出info以上级别日志
        log.info("当前日志级别：{},当前时间：{}","info",new Date());
        //生产环境一般是warn或者error
        log.warn("当前日志级别：{},当前时间：{}","warn",new Date());
        log.error("当前日志级别：{},当前时间：{}","error",new Date());
        List<Teacher> teachers = teacherService.list();
        return R.ok().data("items",teachers);
    }

    //2.查询指定id的讲师
    /*
        400：代表请求参数错误（后端要求的参数没有传或者传入的格式错误）
        后端处理请求时如果给前端统一响应，可以提高前端给用户提示的友好
        以后后端无论成功还是失败 都返回一个统一格式的数据，方便前端解析
            R{
                Integer code;//状态码 20000代表成功  其他失败
                String message;//响应描述信息
                Boolean success;//是否成功
                Map<String,Object> data;  //响应数据
            }
    */
    @GetMapping("getById/{id}")
    public R getById(@PathVariable String id){
            Teacher teacher = teacherService.getById(id);
            return R.ok().data("item",teacher);
    }

    //3.更新讲师：前端提交带id的讲师对象
    @PutMapping("updateById")
    //3.1、pojo入参
    //3.2、Request请求体中的json获取转为绑定的类型的对象（get以外的其他方式才可以使用）
    //3.3、@PathVariable 路径参数
    public R updateById(@RequestBody Teacher teacher){
        boolean b = teacherService.updateById(teacher);
        if(b){
            return R.ok();
        }
        return R.error().message("记录不存在");
    }

    //4、新增讲师
    @PostMapping("save")
    public R save(@ApiParam(value = "新增讲师参数") @RequestBody Teacher teacher){
        boolean b = teacherService.save(teacher);
        if(b){
            return R.ok();
        }
        return R.error().message("新增失败");
    }

    //5、删除讲师
    @DeleteMapping("deleteById/{id}")
    public R deleteById(@PathVariable String id){
        boolean b = teacherService.removeById(id);
        if(b){
            return R.ok();
        }
        return R.error().message("记录不存在");
    }

    //6、分页查询
    @ApiOperation(value = "讲师分页查询")
    @GetMapping("list/{pageNum}/{pageSize}")
    public R list(@ApiParam(value = "页码",defaultValue = "1") @PathVariable Integer pageNum,
                  @ApiParam(value = "每页记录条数",defaultValue = "3") @PathVariable Integer pageSize){
        IPage<Teacher> page = new Page<>(pageNum,pageSize);
        teacherService.page(page);
        return R.ok().data("page",page);
    }
}

